/*
 * Copyright (c) 2007-2020 西安交通信息投资营运有限公司 版权所有
 */

package com.xci.edu.core.dao;

import com.github.lvyanyang.annotation.Paging;
import com.xci.edu.core.entity.EduPlan;
import com.xci.edu.core.filter.EduPlanFilter;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 培训计划数据层
 * @author 张谦 zhangqian@xci96716.com
 * @since 2020-11-25 09:35:56
 */
public interface EduPlanDao {
    /**
     * 新建培训计划
     * @param entity 培训计划实体
     * @return 返回影响的行数
     */
    int insert(@Param("entity") EduPlan entity);

    /**
     * 修改培训计划
     * @param entity 培训计划实体
     * @return 返回影响的行数
     */
    int update(@Param("entity") EduPlan entity);

    /**
     * 修改培训计划(已约人数)
     * @param id     培训计划主键
     * @param useCount 培训计划已约人数
     * @return 返回影响的行数
     */
    int updateUseCountById(@Param("id") Long id,@Param("useCount") Integer useCount);

    /**
     * 根据主键修改培训计划状态
     * @param id     培训计划主键
     * @param status 培训计划状态
     * @return 返回影响的行数
     */
    int updateStatus(@Param("id") Long id, @Param("status") Boolean status);

    /**
     * 根据主键删除培训计划
     * @param id 培训计划主键
     * @return 返回影响的行数
     */
    int deleteById(@Param("id") Long id);


    ///**
    // * 根据主键删除培训计划
    // * @param id 培训计划主键
    // * @param deleteId 删除标识
    // * @return 返回影响的行数
    // */
    //int deleteById(@Param("id") Long id, @Param("deleteId") Long deleteId});

    ///**
    // * 是否存在指定主键的培训计划
    // * @param id 培训计划主键
    // * @return 如果存在返回true
    // */
    //boolean existxById(@Param("id") Long id);

    /**
     * 是否存在指定名称的培训计划
     * @param name 培训计划名称
     * @param excludeId 排除的主键，如果为null则不指定排除的主键
     * @return 如果存在返回true
     */
    boolean existxByName(@Param("name") String name, @Param("excludeId") Long excludeId);

    /**
     * 根据主键查询单个培训计划
     * @param id 培训计划主键
     * @return 返回培训计划实体
     */
    EduPlan selectById(@Param("id") Long id);

    /**
     * 是否存在指定科目的培训计划
     * @param eduCategoryId 科目主键
     * @return 如果存在返回true
     */
    boolean existxByEduCategoryId(@Param("eduCategoryId") Long eduCategoryId);

    /**
     * 查询培训计划列表
     * @param filter 过滤条件
     * @return 返回培训计划列表
     */
    List<EduPlan> selectList(@Param("filter") EduPlanFilter filter);

    /**
     * 查询培训计划分页列表
     * @param filter 过滤条件
     * @return 返回培训计划分页列表
     */
    /*
        allowSortNames = {"name","spell","edu_category_id","edu_category_name","teacher","train_start_date","train_end_date","plan_count","use_count","status","remark","operate_user_id","operate_user_name","operate_date_time"},
        sortNameMaps = {"name:name","spell:spell","edu_category_id:edu_category_id","edu_category_name:edu_category_name","teacher:teacher","train_start_date:train_start_date","train_end_date:train_end_date","plan_count:plan_count","use_count:use_count","status:status","remark:remark","operate_user_id:operate_user_id","operate_user_name:operate_user_name","operate_date_time:operate_date_time"}
    */
    @Paging
    List<EduPlan> selectPageList(@Param("filter") EduPlanFilter filter);

    /**
     * 查询培训计划信息(启用)(下拉框)
     *
     * @param eduCategoryId 科目主键
     * @return 培训计划信息(启用)(下拉框)
     */
    List<EduPlan> getPlanIdAndPlanName(@Param("eduCategoryId") String eduCategoryId);
}